package com.wei.czz.framework.store.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wei.czz.common.vo.store.StoreFormVo;
import com.wei.czz.framework.store.entity.StoreEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商店表
 * 
 * @author wei
 * email 945158190@gmail.com
 * date 2023-11-22 17:44:15
 */
public interface StoreDao extends BaseMapper<StoreEntity> {

    /**
     * 分页查询商店
     * @param page        mp分页对象
     * @param storeFormVo 参数对象
     * @return 分页结果
     */
    Page<StoreEntity> queryPageList(Page<StoreEntity> page, @Param("storeFormVo") StoreFormVo storeFormVo);

    /**
     * 查询用户保存中的商店数量
     * @param userId       用户主键
     * @param status       商店状态
     * @param deleteStatus 删除状态
     * @return 数量
     */
    Integer selectStoreCount(@Param("userId") Long userId, @Param("status") Integer status,
                             @Param("deleteStatus") Integer deleteStatus);

    /**
     * 查询商店提交/修改操作统计
     * @param submitBusinessIdList 提交业务主键列表
     * @param modifyBusinessIdList 修改业务主键列表
     * @param auditReturnStatus    审核状态
     * @param modifyReturnStatus   修改状态
     * @param deleteStatus         删除状态
     * @return 商店列表
     */
    List<StoreEntity> selectStoreOptionStatList(@Param("submitBusinessIdList") List<Long> submitBusinessIdList,
                                                @Param("modifyBusinessIdList") List<Long> modifyBusinessIdList,
                                                @Param("auditReturnStatus") Integer auditReturnStatus,
                                                @Param("modifyReturnStatus") Integer modifyReturnStatus,
                                                @Param("deleteStatus") Integer deleteStatus);

    /**
     * 查询商店最新审核通过列表
     * @param businessIdList 业务主键列表
     * @param finishStatus   通过状态
     * @param deleteStatus   删除状态
     * @return 商店列表
     */
    List<StoreEntity> selectStoreMaxFinishList(@Param("businessIdList") List<Long> businessIdList,
                                               @Param("finishStatus") Integer finishStatus,
                                               @Param("deleteStatus") Integer deleteStatus);

    /**
     * 查询商店状态对应的最新商店主键
     * @param businessId   业务主键
     * @param status       商店状态
     * @param deleteStatus 删除状态
     * @return 商店主键
     */
    Long selectLastId(@Param("businessId") Long businessId, @Param("status") Integer status,
                      @Param("deleteStatus") Integer deleteStatus);
}
